/*=============================================================================

  APPLICATION MANAGER MODULE

  FILE: UImgr.cpp
  
  DESCRIPTION

    Manager Module Definition

  EXTERNALIZED FUNCTIONS

    
  Copyright (c) DaeSung Engineering Inc. All rights reserved.

=============================================================================*/
/*=============================================================================

                             EDIT HISTORY

  ---------  -------  -------------------------------------------------------
    when       who     what, where, why
  ---------  -------  -------------------------------------------------------
   06/28/03   nso4th   Version 0.1

=============================================================================*/

/*=============================================================================
  HEADER INCLUSION
=============================================================================*/
#include "UImgr_MOD.h"

/*=============================================================================
  CONSTATNT DEFINITON
=============================================================================*/
/*=============================================================================
  LOCALIZED FUNCTION DEFINITION
=============================================================================*/
static void cmd_appInit(UImgr *um);
static void cmd_appPollInit(UImgr *um);
static void cmd_appClose(UImgr *um);
static void cmd_appPollClose(UImgr *um);

/*=============================================================================
  UI EVENT HANDLER
=============================================================================*/
void UImgr::Command_Handler(dword cmd, dword wp, dword lp)
{
	switch(cmd)
	{
	case UImgr_REQINIT_C:
	{
		cmd_appInit(this);
		break;
	}
	case UImgr_POLLINIT_C:
	{
		cmd_appPollInit(this);
		
		// Start monitoring !!!
		m_monLock = FALSE;
		break;
	}
	case UImgr_REQCLOSE_C:
	{
		cmd_appClose(this);
		break;
	}
	case UImgr_POLLCLOSE_C:
	{
		cmd_appPollClose(this);
		break;
	}
	}
}


/*=============================================================================
  LOCALIZED FUNCTION IMPLEMENTATION
=============================================================================*/
void cmd_appInit(UImgr *um)
{
	SYSmgr		*sm = (SYSmgr*)ObjList_Get(SYS_MGR);

	if(sm == NULL)
		return;

	um->State_SendCommand(UImgr_POLLINIT_C, 0, 0);
}

void cmd_appPollInit(UImgr *um)
{
	SYSmgr		*sm = (SYSmgr*)ObjList_Get(SYS_MGR);
	CMainFrame	*fm = (CMainFrame*)ObjList_Get(VIEW_MAINFRAME);

	if((sm == NULL) || (UIIsInit() == FALSE))
	{
		Task_Delay(100);
		Task_Switch();
		um->State_SendCommand(UImgr_POLLINIT_C, 0, 0);
		return;
	}
	sm->DEV_Init();
	fm->appInitDone();
}

void cmd_appClose(UImgr *um)
{
	SYSmgr		*sm = (SYSmgr*)ObjList_Get(SYS_MGR);
	mcxt		tcb;

	tcb = um->Task_Get();
	if(sm == NULL)
	{
		um->State_SendCommand(UImgr_POLLCLOSE_C, 0, 0);
		return;
	}

	// Nomal termination process
	sm->DEV_Close();
	um->State_SendCommand(UImgr_POLLCLOSE_C, 0, 0);
}

void cmd_appPollClose(UImgr *um)
{
	SYSmgr		*sm = (SYSmgr*)ObjList_Get(SYS_MGR);
	CMainFrame	*fm = (CMainFrame*)ObjList_Get(VIEW_MAINFRAME);
	mcxt		tcb;
	dword		mjSts, mnSts;
	
	tcb = um->Task_Get();

	// Check SYSmgr's state
	if(sm != NULL)
	{
		mjSts = sm->State_MajCurrent();
		mnSts = sm->State_MinCurrent();
		
		if(mjSts != IDL_S)
		{
			um->State_SendCommand(UImgr_POLLCLOSE_C, 0, 0);
			return;
		}
	}
	sm->Close();
	Task_Switch();
	fm->PostMessage(WM_CLOSE, 0, 0);

	Task_Killed(um->Task_Get());
}

/*--- END OF UImgr_CMD.CPP ---*/
